// pages/core/messages/messages.js
Page({

  /**
   * 页面的初始数据
   */
  data: {
    activeTab: 'notice',
    messages: [],
    showDeleteDialog: false
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    this.loadMessages('notice');
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {
    this.loadMessages(this.data.activeTab);
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {
    this.loadMessages(this.data.activeTab, () => {
      wx.stopPullDownRefresh();
    });
  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  },

  // 加载消息数据
  loadMessages(type, callback) {
    wx.showLoading({
      title: '加载中...'
    });
    
    // 此处预留接口调用 - 获取消息列表
    const getMessagesPromise = () => {
      // 未来实现: 调用云函数获取消息列表
      // 目前使用模拟数据
      return new Promise((resolve) => {
        setTimeout(() => {
          let messages = [];
          
          switch (type) {
            case 'notice':
              messages = [
                {
                  id: 1,
                  title: '系统公告',
                  description: '欢迎使用贵州四季康养文旅小程序，希望您在贵州旅行愉快！',
                  time: '2025-06-01 15:30',
                  icon: 'notification',
                  read: false,
                  type: 'notice'
                },
                {
                  id: 2,
                  title: '活动通知',
                  description: '您关注的"2025贵州民族文化节"即将开始，不要错过哦！',
                  time: '2025-05-30 10:15',
                  icon: 'activity',
                  read: true,
                  type: 'notice'
                },
                {
                  id: 3,
                  title: '会员升级',
                  description: '恭喜您成为银卡会员，可享受更多优惠特权！',
                  time: '2025-05-28 09:45',
                  icon: 'user',
                  read: true,
                  type: 'notice'
                }
              ];
              break;
            case 'order':
              messages = [
                {
                  id: 4,
                  title: '订单支付成功',
                  description: '您的订单#12345已支付成功，我们将尽快为您发货。',
                  time: '2025-06-01 14:20',
                  icon: 'shop',
                  read: false,
                  type: 'order'
                },
                {
                  id: 5,
                  title: '订单已发货',
                  description: '您的订单#12344已发货，物流单号: SF1234567890',
                  time: '2025-05-31 11:30',
                  icon: 'deliver',
                  read: false,
                  type: 'order'
                }
              ];
              break;
            case 'service':
              messages = [
                {
                  id: 6,
                  title: '客服回复',
                  description: '您的咨询已收到，请问还有其他问题需要帮助吗？',
                  time: '2025-06-01 16:45',
                  icon: 'service',
                  read: false,
                  type: 'service'
                }
              ];
              break;
            default:
              messages = [];
          }
          
          resolve({
            code: 0,
            message: 'success',
            data: messages
          });
        }, 800);
      });
    };
    
    getMessagesPromise()
      .then((res) => {
        if (res.code === 0) {
          this.setData({
            messages: res.data
          });
        } else {
          wx.showToast({
            title: res.message || '获取消息失败',
            icon: 'none'
          });
        }
      })
      .catch((error) => {
        console.error('获取消息列表失败:', error);
        wx.showToast({
          title: '获取消息失败，请重试',
          icon: 'none'
        });
      })
      .finally(() => {
        wx.hideLoading();
        callback && callback();
      });
  },
  
  // 选项卡切换事件
  onTabsChange(e) {
    const { value } = e.detail;
    this.setData({
      activeTab: value
    });
    this.loadMessages(value);
  },
  
  // 消息点击事件
  onMessageTap(e) {
    const { message } = e.currentTarget.dataset;
    
    // 标记为已读
    if (!message.read) {
      this.markMessageRead(message.id);
    }
    
    // 根据消息类型跳转到不同页面
    switch (message.type) {
      case 'notice':
        wx.navigateTo({
          url: `/pages/social/message_detail/message_detail?id=${message.id}&type=${message.type}`
        });
        break;
      case 'order':
        wx.navigateTo({
          url: `/pages/transaction/order_detail/order_detail?id=${message.id}`
        });
        break;
      case 'service':
        wx.navigateTo({
          url: `/pages/social/customer_service/customer_service`
        });
        break;
      default:
        break;
    }
  },
  
  // 标记单个消息为已读
  markMessageRead(messageId) {
    // 此处预留接口调用 - 标记消息已读
    const markReadPromise = () => {
      // 未来实现: 调用云函数标记消息已读
      // 目前仅更新本地状态
      return new Promise((resolve) => {
        setTimeout(() => {
          resolve({
            code: 0,
            message: 'success'
          });
        }, 200);
      });
    };
    
    markReadPromise()
      .then((res) => {
        if (res.code === 0) {
          // 更新本地状态
          const { messages } = this.data;
          const updatedMessages = messages.map((item) => {
            if (item.id === messageId) {
              return { ...item, read: true };
            }
            return item;
          });
          
          this.setData({
            messages: updatedMessages
          });
        }
      })
      .catch((error) => {
        console.error('标记消息已读失败:', error);
      });
  },
  
  // 标记全部已读
  onMarkAllRead() {
    if (this.data.messages.length === 0) {
      return;
    }
    
    wx.showLoading({
      title: '处理中...'
    });
    
    // 此处预留接口调用 - 标记全部已读
    const markAllReadPromise = () => {
      // 未来实现: 调用云函数标记全部已读
      // 目前仅更新本地状态
      return new Promise((resolve) => {
        setTimeout(() => {
          resolve({
            code: 0,
            message: 'success'
          });
        }, 500);
      });
    };
    
    markAllReadPromise()
      .then((res) => {
        if (res.code === 0) {
          // 更新本地状态
          const { messages } = this.data;
          const updatedMessages = messages.map((item) => {
            return { ...item, read: true };
          });
          
          this.setData({
            messages: updatedMessages
          });
          
          wx.showToast({
            title: '全部已读',
            icon: 'success'
          });
        } else {
          wx.showToast({
            title: res.message || '操作失败',
            icon: 'none'
          });
        }
      })
      .catch((error) => {
        console.error('标记全部已读失败:', error);
        wx.showToast({
          title: '操作失败，请重试',
          icon: 'none'
        });
      })
      .finally(() => {
        wx.hideLoading();
      });
  },
  
  // 删除全部消息
  onDeleteAll() {
    if (this.data.messages.length === 0) {
      return;
    }
    
    this.setData({
      showDeleteDialog: true
    });
  },
  
  // 确认删除
  confirmDelete() {
    wx.showLoading({
      title: '处理中...'
    });
    
    // 此处预留接口调用 - 删除全部消息
    const deleteAllPromise = () => {
      // 未来实现: 调用云函数删除全部消息
      // 目前仅更新本地状态
      return new Promise((resolve) => {
        setTimeout(() => {
          resolve({
            code: 0,
            message: 'success'
          });
        }, 500);
      });
    };
    
    deleteAllPromise()
      .then((res) => {
        if (res.code === 0) {
          // 更新本地状态
          this.setData({
            messages: [],
            showDeleteDialog: false
          });
          
          wx.showToast({
            title: '已清空消息',
            icon: 'success'
          });
        } else {
          this.setData({
            showDeleteDialog: false
          });
          
          wx.showToast({
            title: res.message || '操作失败',
            icon: 'none'
          });
        }
      })
      .catch((error) => {
        console.error('删除全部消息失败:', error);
        this.setData({
          showDeleteDialog: false
        });
        
        wx.showToast({
          title: '操作失败，请重试',
          icon: 'none'
        });
      })
      .finally(() => {
        wx.hideLoading();
      });
  },
  
  // 取消删除
  cancelDelete() {
    this.setData({
      showDeleteDialog: false
    });
  }
})